[DllImport("Netapi32.dll")]
extern static int NetQueryDisplayInformation([MarshalAs(UnmanagedType.LPWStr)]
string serverName,
int Level,
int ResumeHandle,
int EntriesRequested,
int prefMaxLength,
out int entriesRead,
out IntPtr Buffer);
Declare Function NetQueryDisplayInformation Lib "Netapi32.dll"
(serverName As Byte, _
ByVal level As Long, _
ByVal ResumeHandle As Long, _
ByVal EntriesRequested As Long, _
ByVal prefMaxLen As Long, _
entriesRead As Long, _
Buffer As Long) As Long
None.
Please add some!
[ StructLayout( LayoutKind.Sequential)]
public struct NET_DISPLAY_USER
{
public System.IntPtr usri1_name;
public System.IntPtr usri1_comment;
public int usri1_flags;
public System.IntPtr usri1_full_name;
public int usri1_user_id;
public int usri1_next_index;
}
[StructLayout( LayoutKind.Sequential )]
public struct NET_DISPLAY_GROUP
{
public System.IntPtr grp_name;
public System.IntPtr grp_comment;
public int grp_group_id;
public int grp_attributes;
public int grp_next_index;
}
[StructLayout( LayoutKind.Sequential )]
public struct NET_DISPLAY_MACHINE
{
public System.IntPtr usri2_name;
public System.IntPtr usri2_comment;
public int usri2_flags;
public int usri2_user_id;
public int usri2_next_index;
}
#region constants
private const int READ_CONTROL = 0x20000;
private const int TOKEN_QUERY = 0x8;
private const int ERROR_MORE_DATA = 234;
private const int NERR_TRUE = 1;
private const int RPC_S_SERVER_UNAVAILABLE = 1722;
private const int ERROR_ACCESS_DENIED = 5;
private const int ERROR_INVALID_LEVEL = 124;
private const int NERR_Success = 0;
#endregion
#region external dll declares
[DllImport( "advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
[DllImport("Netapi32.dll")] static extern int NetQueryDisplayInformation([MarshalAs(UnmanagedType.LPWStr)] string serverName,
int Level, int ResumeHandle, int EntriesRequested, int prefMaxLength, out int entriesRead, out System.IntPtr Buffer);
[DllImport("netapi32.dll", CharSet=CharSet.Auto, SetLastError=true)] private static extern int NetApiBufferFree (System.IntPtr pBuffer);
#endregion
public static test(string strDomain)
{
System.IntPtr x = System.IntPtr.Zero;
int lindex = 0;
int lread =0;
int lret = ERROR_MORE_DATA;
ArrayList a = new ArrayList();
NET_DISPLAY_GROUP grp = new NET_DISPLAY_GROUP ();
NET_DISPLAY_USER usr = new NET_DISPLAY_USER();
while((lret == ERROR_MORE_DATA))
{
//get each group
lret = NetQueryDisplayInformation ( strDomain, 3, lindex, 1, 1024, out lread , out x);
if (lread>0)
{
//get group
if (x!=System.IntPtr.Zero)
{
grp = (NET_DISPLAY_GROUP)Marshal.PtrToStructure (x,typeof(NET_DISPLAY_GROUP) );
a.Add ( Marshal.PtrToStringUni (grp.grp_name) );
}
//get next index
lindex = grp.grp_next_index;
//free buffer
if (x!=System.IntPtr.Zero)
NetApiBufferFree (x);
}
lret = ERROR_MORE_DATA;
//now get users
while((lret == ERROR_MORE_DATA))
{
//get each user
lret = NetQueryDisplayInformation ( strDomain, 1, lindex, 1, 1024, out lread , out x);
if (lread>0)
{
//get group
if (x!=System.IntPtr.Zero)
{
usr = (NET_DISPLAY_USER)Marshal.PtrToStructure (x,typeof(NET_DISPLAY_USER) );
a.Add ( Marshal.PtrToStringUni (usr.usri1_name) );
}
//get next index
lindex = usr.usri1_next_index;
//free buffer
if (x!=System.IntPtr.Zero)
NetApiBufferFree (x);
}
}
lret = ERROR_MORE_DATA;
NET_DISPLAY_MACHINE mac = new NET_DISPLAY_MACHINE ();
//now get users
while((lret == ERROR_MORE_DATA))
{
//get each group
lret = NetQueryDisplayInformation ( strDomain, 2, lindex, 1, 1024, out lread , out x);
if (lread>0)
{
//get group
if (x!=System.IntPtr.Zero)
{
mac = (NET_DISPLAY_MACHINE)Marshal.PtrToStructure (x,typeof(NET_DISPLAY_MACHINE) );
a.Add ( Marshal.PtrToStringUni (mac.usri2_name) );
}
//get next index
lindex = mac.usri2_next_index;
//free buffer
if (x!=System.IntPtr.Zero)
NetApiBufferFree (x);
}
}
}
Do you know one? Please contribute it!